#include "../esyio.h"
#include <string.h>
/**
 * 在源字符串中删去在目标字符串中含有的字符
 * @param str1 源字符串
 * @param str2 目标字符串
 */
void DeleteInAnother(char *str1,char* str2) {
    int len = strlen(str2);
    int j = 0, k = 0;
    for (int i = 0; str1[i] != 0;++i) {
        while (str1[i] != str2[j]) {
            j++;
        }
        if (j >= len) {
            // 表示str1[i]在str2中不含有
            str1[k++] = str1[i];
        }
        j = 0;
    }
    str1[k] = 0;
}

/**
 *将源字符串插入到目标字符串中m+1开始的位置
 * @param str1 源字符串
 * @param str2 目标字符串
 */
void InsertIntoAnother(char *str1, char *str2,int m) {
    int len1 = strlen(str1), len2 = strlen(str2);
    int k = 0;
    for (int j = 0;j<len2;++j) {
        // 将 str1 中从位置 m 到末尾的字符依次向后移动一位
        for (int i = len1 + j; i >= m; --i) {
            str1[i + 1] = str1[i];
        }
        // 将 str2 中的当前字符插入到 str1 的位置 m 处
        str1[m++] = str2[k++];
    }
    str1[len1+len2] = 0;
}

/**
 * 删去连续相同的字符
 * @param str 字符串
 */
void removeConsecutiveChar(char *str) {
    if (str == NULL || *str == 0) return;
    int k = 0;
    for (int i = 1;str[i] != 0;i++) {
        if (str[i] != str[k]) {
            str[++k] = str[i];
        }
    }
    str[k+1] = 0;
}

void deleteStrn(char *str, int start, int len) {
    int str_len = strlen(str);
    if (str == NULL || start < 0 || len <= 0 || start >= str_len)
        return;
    // 删除指定位置开始的 len 长度的字符
    int i;
    // i从start到 删除字符后的新字符串的最后一个字符的位置
    for (i = start; i < str_len - len; i++) {
        str[i] = str[i + len];
    }
    str[i] = '\0';
}


int main() {
    // 不能是char *str = "ABCDE"
    // 常量不能修改
    char str[50] = "ABCDEFGH";
    deleteStrn(str,5,2000);
    puts(str);
    return 0;
}


// int main() {
//     // 不能是char *str = "ABCDE"
//     // 常量不能修改
//     char str[50] = "A";
//     removeConsecutiveChar(str);
//     puts(str);
//     return 0;
// }

// int main() {
//     // 不能是char *str = "ABCDE"
//     // 常量不能修改
//     char str1[50] = "ABCDEFG";
//     char str2[50] = "XY";
//     InsertIntoAnother(str1,str2,2);
//     puts(str1);
//     return 0;
// }


// int main() {
//     // 不能是char *str = "ABCDE"
//     // 常量不能修改
//     char str1[] = "ABCDEFG";
//     char str2[] = "BD";
//     DeleteInAnother(str1,str2);
//     puts(str1);
//     return 0;
// }